Network storage is a common approach to backing up data and making large amounts of data accessible to a variety of clients. In a network storage environment, a storage server makes data available to client systems by presenting or exporting to the clients one or more logical containers of data. A storage server also receives data from client systems for storage. There are various forms of network storage, including network attached storage (NAS) and storage area network (SAN). In a NAS context, a storage server services file-level requests from clients. In a SAN context, a storage server services block-level requests. Some storage servers are capable of servicing both file-level requests and block-level requests.
The technology marketplace has been experiencing several trends that impact existing network storage technologies. First, the amount of data which is stored using network storage systems continues to increase. Second, the number of applications in which data objects are retrieved in random fashion is also increasing. Applications such as photo archives provide storage for very large numbers of data objects which are often accessed randomly. In some cases, these data objects are also modified infrequently. Conventional file system layouts have been shown to be inefficient for storing and retrieving data objects under these circumstances. The hierarchical namespace and inode structure used in many conventional file system layouts requires three or more disk input/output (I/O) operations to store or retrieve a data object. One I/O is typically required to retrieve information necessary to translate the name of the data object to an inode. A second I/O is necessary to retrieve the inode structure. At least a third I/O is typically required to retrieve the data object. These conventional layouts also typically include storage of metadata attributes that may not be needed in these applications.
In addition, it is becoming more important for network storage systems to be highly adaptable to different applications and performance profiles. Conventional network storage systems each generally use a single data layout, which may be adequate for some uses but is generally not optimal for the many different configurations the marketplace requires. Consequently, a network storage system designer must make various design choices about how the various potential uses of the system should drive the design. These choices will then determine the performance characteristics of the system. It is very difficult, if not impossible, to change the resulting system operation characteristics once the design has been implemented and productized.